1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.prpl;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.glist;
34 import derelict.glib.ghash;
35 import derelict.purple.account;
36 import derelict.purple.blist;
37 import derelict.purple.connection;
38 import derelict.purple.conversation;
39 import derelict.purple.notify;
40 import derelict.purple.status;
41 import derelict.purple.imgstore;
42 import derelict.purple.roomlist;
43 import derelict.purple.whiteboard;
44 import derelict.purple.enum_types;
45 import derelict.purple.plugin;
46 import derelict.purple.ft;
47 import core.stdc.time;
48 import core.stdc.config;
49 
50 extern (C):
51 
52 alias _PurplePluginProtocolInfo PurplePluginProtocolInfo;
53 alias _PurpleAttentionType PurpleAttentionType;
54 alias _Anonymous_0 PurpleIconScaleRules;
55 alias _PurpleBuddyIconSpec PurpleBuddyIconSpec;
56 alias _PurpleThumbnailSpec PurpleThumbnailSpec;
57 alias _Anonymous_1 PurpleProtocolOptions;
58 
59 enum _Anonymous_0
60 {
61 	PURPLE_ICON_SCALE_DISPLAY = 1,
62 	PURPLE_ICON_SCALE_SEND = 2
63 }
64 
65 enum _Anonymous_1
66 {
67 	OPT_PROTO_UNIQUE_CHATNAME = 4,
68 	OPT_PROTO_CHAT_TOPIC = 8,
69 	OPT_PROTO_NO_PASSWORD = 16,
70 	OPT_PROTO_MAIL_CHECK = 32,
71 	OPT_PROTO_IM_IMAGE = 64,
72 	OPT_PROTO_PASSWORD_OPTIONAL = 128,
73 	OPT_PROTO_USE_POINTSIZE = 256,
74 	OPT_PROTO_REGISTER_NOSCREENNAME = 512,
75 	OPT_PROTO_SLASH_COMMANDS_NATIVE = 1024,
76 	OPT_PROTO_INVITE_MESSAGE = 2048
77 }
78 
79 struct _PurpleBuddyIconSpec
80 {
81 	char* format;
82 	int min_width;
83 	int min_height;
84 	int max_width;
85 	int max_height;
86 	size_t max_filesize;
87 	PurpleIconScaleRules scale_rules;
88 }
89 
90 struct proto_chat_entry
91 {
92 	const(char)* label;
93 	const(char)* identifier;
94 	gboolean required;
95 	gboolean is_int;
96 	int min;
97 	int max;
98 	gboolean secret;
99 }
100 
101 struct _PurpleAttentionType
102 {
103 	const(char)* name;
104 	const(char)* incoming_description;
105 	const(char)* outgoing_description;
106 	const(char)* icon_name;
107 	const(char)* unlocalized_name;
108 	gpointer _reserved2;
109 	gpointer _reserved3;
110 	gpointer _reserved4;
111 }
112 
113 struct _PurplePluginProtocolInfo
114 {
115 	PurpleProtocolOptions options;
116 	GList* user_splits;
117 	GList* protocol_options;
118 	PurpleBuddyIconSpec icon_spec;
119 	const(char)* function (PurpleAccount*, PurpleBuddy*) list_icon;
120 	const(char)* function (PurpleBuddy*) list_emblem;
121 	char* function (PurpleBuddy*) status_text;
122 	void function (PurpleBuddy*, PurpleNotifyUserInfo*, gboolean) tooltip_text;
123 	GList* function (PurpleAccount*) status_types;
124 	GList* function (PurpleBlistNode*) blist_node_menu;
125 	GList* function (PurpleConnection*) chat_info;
126 	GHashTable* function (PurpleConnection*, const(char)*) chat_info_defaults;
127 	void function (PurpleAccount*) login;
128 	void function (PurpleConnection*) close;
129 	int function (PurpleConnection*, const(char)*, const(char)*, PurpleMessageFlags) send_im;
130 	void function (PurpleConnection*, const(char)*) set_info;
131 	uint function (PurpleConnection*, const(char)*, PurpleTypingState) send_typing;
132 	void function (PurpleConnection*, const(char)*) get_info;
133 	void function (PurpleAccount*, PurpleStatus*) set_status;
134 	void function (PurpleConnection*, int) set_idle;
135 	void function (PurpleConnection*, const(char)*, const(char)*) change_passwd;
136 	void function (PurpleConnection*, PurpleBuddy*, PurpleGroup*) add_buddy;
137 	void function (PurpleConnection*, GList*, GList*) add_buddies;
138 	void function (PurpleConnection*, PurpleBuddy*, PurpleGroup*) remove_buddy;
139 	void function (PurpleConnection*, GList*, GList*) remove_buddies;
140 	void function (PurpleConnection*, const(char)*) add_permit;
141 	void function (PurpleConnection*, const(char)*) add_deny;
142 	void function (PurpleConnection*, const(char)*) rem_permit;
143 	void function (PurpleConnection*, const(char)*) rem_deny;
144 	void function (PurpleConnection*) set_permit_deny;
145 	void function (PurpleConnection*, GHashTable*) join_chat;
146 	void function (PurpleConnection*, GHashTable*) reject_chat;
147 	char* function (GHashTable*) get_chat_name;
148 	void function (PurpleConnection*, int, const(char)*, const(char)*) chat_invite;
149 	void function (PurpleConnection*, int) chat_leave;
150 	void function (PurpleConnection*, int, const(char)*, const(char)*) chat_whisper;
151 	int function (PurpleConnection*, int, const(char)*, PurpleMessageFlags) chat_send;
152 	void function (PurpleConnection*) keepalive;
153 	void function (PurpleAccount*) register_user;
154 	void function (PurpleConnection*, int, const(char)*) get_cb_info;
155 	void function (PurpleConnection*, int, const(char)*) get_cb_away;
156 	void function (PurpleConnection*, const(char)*, const(char)*) alias_buddy;
157 	void function (PurpleConnection*, const(char)*, const(char)*, const(char)*) group_buddy;
158 	void function (PurpleConnection*, const(char)*, PurpleGroup*, GList*) rename_group;
159 	void function (PurpleBuddy*) buddy_free;
160 	void function (PurpleConnection*, const(char)*) convo_closed;
161 	const(char)* function (const(PurpleAccount)*, const(char)*) normalize;
162 	void function (PurpleConnection*, PurpleStoredImage*) set_buddy_icon;
163 	void function (PurpleConnection*, PurpleGroup*) remove_group;
164 	char* function (PurpleConnection*, int, const(char)*) get_cb_real_name;
165 	void function (PurpleConnection*, int, const(char)*) set_chat_topic;
166 	PurpleChat* function (PurpleAccount*, const(char)*) find_blist_chat;
167 	PurpleRoomlist* function (PurpleConnection*) roomlist_get_list;
168 	void function (PurpleRoomlist*) roomlist_cancel;
169 	void function (PurpleRoomlist*, PurpleRoomlistRoom*) roomlist_expand_category;
170 	gboolean function (PurpleConnection*, const(char)*) can_receive_file;
171 	void function (PurpleConnection*, const(char)*, const(char)*) send_file;
172 	PurpleXfer* function (PurpleConnection*, const(char)*) new_xfer;
173 	gboolean function (const(PurpleBuddy)*) offline_message;
174 	PurpleWhiteboardPrplOps* whiteboard_prpl_ops;
175 	int function (PurpleConnection*, const(char)*, int) send_raw;
176 	char* function (PurpleRoomlistRoom*) roomlist_room_serialize;
177 	void function (PurpleAccount*, PurpleAccountUnregistrationCb, void*) unregister_user;
178 	gboolean function (PurpleConnection*, const(char)*, guint) send_attention;
179 	GList* function (PurpleAccount*) get_attention_types;
180 	c_ulong struct_size;
181 	GHashTable* function (PurpleAccount*) get_account_text_table;
182 	gboolean function (PurpleAccount*, const(char)*, PurpleMediaSessionType) initiate_media;
183 	PurpleMediaCaps function (PurpleAccount*, const(char)*) get_media_caps;
184 	PurpleMood* function (PurpleAccount*) get_moods;
185 	void function (PurpleConnection*, const(char)*, PurpleSetPublicAliasSuccessCallback, PurpleSetPublicAliasFailureCallback) set_public_alias;
186 	void function (PurpleConnection*, PurpleGetPublicAliasSuccessCallback, PurpleGetPublicAliasFailureCallback) get_public_alias;
187 	void function (PurpleConnection*, PurpleBuddy*, PurpleGroup*, const(char)*) add_buddy_with_invite;
188 	void function (PurpleConnection*, GList*, GList*, const(char)*) add_buddies_with_invite;
189 }
190 
191 struct _PurpleThumbnailSpec;
192 
193 
194 
195 version(Derelict_Link_Static)
196 {
197     extern( C ) nothrow 
198     {
199         PurpleAttentionType* purple_attention_type_new(const(char)* ulname, const(char)* name, const(char)* inc_desc, const(char)* out_desc);
200         void purple_attention_type_set_name(PurpleAttentionType* type, const(char)* name);
201         void purple_attention_type_set_incoming_desc(PurpleAttentionType* type, const(char)* desc);
202         void purple_attention_type_set_outgoing_desc(PurpleAttentionType* type, const(char)* desc);
203         void purple_attention_type_set_icon_name(PurpleAttentionType* type, const(char)* name);
204         void purple_attention_type_set_unlocalized_name(PurpleAttentionType* type, const(char)* ulname);
205         const(char)* purple_attention_type_get_name(const(PurpleAttentionType)* type);
206         const(char)* purple_attention_type_get_incoming_desc(const(PurpleAttentionType)* type);
207         const(char)* purple_attention_type_get_outgoing_desc(const(PurpleAttentionType)* type);
208         const(char)* purple_attention_type_get_icon_name(const(PurpleAttentionType)* type);
209         const(char)* purple_attention_type_get_unlocalized_name(const(PurpleAttentionType)* type);
210         void purple_prpl_got_account_idle(PurpleAccount* account, gboolean idle, time_t idle_time);
211         void purple_prpl_got_account_login_time(PurpleAccount* account, time_t login_time);
212         void purple_prpl_got_account_status(PurpleAccount* account, const(char)* status_id, ...);
213         void purple_prpl_got_account_actions(PurpleAccount* account);
214         void purple_prpl_got_user_idle(PurpleAccount* account, const(char)* name, gboolean idle, time_t idle_time);
215         void purple_prpl_got_user_login_time(PurpleAccount* account, const(char)* name, time_t login_time);
216         void purple_prpl_got_user_status(PurpleAccount* account, const(char)* name, const(char)* status_id, ...);
217         void purple_prpl_got_user_status_deactive(PurpleAccount* account, const(char)* name, const(char)* status_id);
218         void purple_prpl_change_account_status(PurpleAccount* account, PurpleStatus* old_status, PurpleStatus* new_status);
219         GList* purple_prpl_get_statuses(PurpleAccount* account, PurplePresence* presence);
220         void purple_prpl_send_attention(PurpleConnection* gc, const(char)* who, guint type_code);
221         void purple_prpl_got_attention(PurpleConnection* gc, const(char)* who, guint type_code);
222         void purple_prpl_got_attention_in_chat(PurpleConnection* gc, int id, const(char)* who, guint type_code);
223         PurpleMediaCaps purple_prpl_get_media_caps(PurpleAccount* account, const(char)* who);
224         gboolean purple_prpl_initiate_media(PurpleAccount* account, const(char)* who, PurpleMediaSessionType type);
225         void purple_prpl_got_media_caps(PurpleAccount* account, const(char)* who);
226         PurplePlugin* purple_find_prpl(const(char)* id);
227     }
228 }
229 else
230 {
231     extern( C ) nothrow 
232     {
233         alias da_purple_attention_type_new = PurpleAttentionType* function(const(char)* ulname, const(char)* name, const(char)* inc_desc, const(char)* out_desc);			
234         alias da_purple_attention_type_set_name = void function(PurpleAttentionType* type, const(char)* name);																
235         alias da_purple_attention_type_set_incoming_desc = void function(PurpleAttentionType* type, const(char)* desc);														
236         alias da_purple_attention_type_set_outgoing_desc = void function(PurpleAttentionType* type, const(char)* desc);														
237         alias da_purple_attention_type_set_icon_name = void function(PurpleAttentionType* type, const(char)* name);															
238         alias da_purple_attention_type_set_unlocalized_name = void function(PurpleAttentionType* type, const(char)* ulname);												
239         alias da_purple_attention_type_get_name = const(char)* function(const(PurpleAttentionType)* type);																	
240         alias da_purple_attention_type_get_incoming_desc = const(char)* function(const(PurpleAttentionType)* type);															
241         alias da_purple_attention_type_get_outgoing_desc = const(char)* function(const(PurpleAttentionType)* type);															
242         alias da_purple_attention_type_get_icon_name = const(char)* function(const(PurpleAttentionType)* type);																
243         alias da_purple_attention_type_get_unlocalized_name = const(char)* function(const(PurpleAttentionType)* type);														
244         alias da_purple_prpl_got_account_idle = void function(PurpleAccount* account, gboolean idle, time_t idle_time);														
245         alias da_purple_prpl_got_account_login_time = void function(PurpleAccount* account, time_t login_time);																
246         alias da_purple_prpl_got_account_status = void function(PurpleAccount* account, const(char)* status_id, ...);														
247         alias da_purple_prpl_got_account_actions = void function(PurpleAccount* account);																					
248         alias da_purple_prpl_got_user_idle = void function(PurpleAccount* account, const(char)* name, gboolean idle, time_t idle_time);										
249         alias da_purple_prpl_got_user_login_time = void function(PurpleAccount* account, const(char)* name, time_t login_time);												
250         alias da_purple_prpl_got_user_status = void function(PurpleAccount* account, const(char)* name, const(char)* status_id, ...);										
251         alias da_purple_prpl_got_user_status_deactive = void function(PurpleAccount* account, const(char)* name, const(char)* status_id);									
252         alias da_purple_prpl_change_account_status = void function(PurpleAccount* account, PurpleStatus* old_status, PurpleStatus* new_status);								
253         alias da_purple_prpl_get_statuses = GList* function(PurpleAccount* account, PurplePresence* presence);																
254         alias da_purple_prpl_send_attention = void function(PurpleConnection* gc, const(char)* who, guint type_code);														
255         alias da_purple_prpl_got_attention = void function(PurpleConnection* gc, const(char)* who, guint type_code);														
256         alias da_purple_prpl_got_attention_in_chat = void function(PurpleConnection* gc, int id, const(char)* who, guint type_code);										
257         alias da_purple_prpl_get_media_caps = PurpleMediaCaps function(PurpleAccount* account, const(char)* who);															
258         alias da_purple_prpl_initiate_media = gboolean function(PurpleAccount* account, const(char)* who, PurpleMediaSessionType type);										
259         alias da_purple_prpl_got_media_caps = void function(PurpleAccount* account, const(char)* who);																		
260         alias da_purple_find_prpl = PurplePlugin* function(const(char)* id);	
261     }
262 
263     __gshared
264     {
265 	    da_purple_attention_type_new purple_attention_type_new;
266 	    da_purple_attention_type_set_name purple_attention_type_set_name;
267 	    da_purple_attention_type_set_incoming_desc purple_attention_type_set_incoming_desc;
268 	    da_purple_attention_type_set_outgoing_desc purple_attention_type_set_outgoing_desc;
269 	    da_purple_attention_type_set_icon_name purple_attention_type_set_icon_name;
270 	    da_purple_attention_type_set_unlocalized_name purple_attention_type_set_unlocalized_name;
271 	    da_purple_attention_type_get_name purple_attention_type_get_name;
272 	    da_purple_attention_type_get_incoming_desc purple_attention_type_get_incoming_desc;
273 	    da_purple_attention_type_get_outgoing_desc purple_attention_type_get_outgoing_desc;
274 	    da_purple_attention_type_get_icon_name purple_attention_type_get_icon_name;
275 	    da_purple_attention_type_get_unlocalized_name purple_attention_type_get_unlocalized_name;
276 	    da_purple_prpl_got_account_idle purple_prpl_got_account_idle;
277 	    da_purple_prpl_got_account_login_time purple_prpl_got_account_login_time;
278 	    da_purple_prpl_got_account_status purple_prpl_got_account_status;
279 	    da_purple_prpl_got_account_actions purple_prpl_got_account_actions;
280 	    da_purple_prpl_got_user_idle purple_prpl_got_user_idle;
281 	    da_purple_prpl_got_user_login_time purple_prpl_got_user_login_time;
282 	    da_purple_prpl_got_user_status purple_prpl_got_user_status;
283 	    da_purple_prpl_got_user_status_deactive purple_prpl_got_user_status_deactive;
284 	    da_purple_prpl_change_account_status purple_prpl_change_account_status;
285 	    da_purple_prpl_get_statuses purple_prpl_get_statuses;
286 	    da_purple_prpl_send_attention purple_prpl_send_attention;
287 	    da_purple_prpl_got_attention purple_prpl_got_attention;
288 	    da_purple_prpl_got_attention_in_chat purple_prpl_got_attention_in_chat;
289 	    da_purple_prpl_get_media_caps purple_prpl_get_media_caps;
290 	    da_purple_prpl_initiate_media purple_prpl_initiate_media;
291 	    da_purple_prpl_got_media_caps purple_prpl_got_media_caps;
292 	    da_purple_find_prpl purple_find_prpl;
293     }
294 }